# 变量的类型

"""
     python中的变量的类型，不需要在定义变量的时候显示声明，
     而是只是依靠初始化语句，根据初始化的值的类型来进行确定的
"""

# 1. 整形-int
"""
在python中，int能够表示的数据范围，是“无穷”的
python的int是可以根据要表示数据的大小，自动扩容，因此python没有long、short的类型了
"""
a = 10
print(a)
print(type(a))  # 判断a的类型

# 2. 浮点数-float
"""
在c++里面，float是4个字节的，也叫“单精度浮点数”
          double是8个字节，也叫“双精度浮点数”
而在python里面，float就是双精度浮点数，等同于c++里面的double
"""
b = 1314.521
print(b)
print(type(b))  # 判断b的类型

# 3. 字符串-str-把一个个字符放在一起
"""
      字符---英文字母、阿拉伯数字甚至汉字符号，都可以认为是“字符”
      python中要求使用引号把一系列的字符，引起来就构成了-字符串
      引号使用 ' 或 " 都可以
      如果字符串里面包含了双引号，表示字符串就可以用单引号，引起来
      如果字符串里面包含了单引号，表示字符串就可以用双引号，引起来
         如果同时有单引号和双引号，那么，在python中，使用三引号表示-'''或”“”(英文的）
         
         用len函数来求字符串的长度
         
        字符串拼接，形成新的变量，对原来的两个被拼接的变量内容不变
        不能把字符串和数字进行混合相加（类型不同）
        
"""
c = 'hello'
print(c)
print(len(c))

d = "hehe"
print(d)

e = 'My name is " F "'
print(e)

f = ''' My name is " F G T " '''
print(f)

a1 = 'hello'
a2 = 'world'
print(a1 + a2)

# 4. 布尔-只有True（真）和False（假）

"""
     因为布尔的取值只有 真 和 假，所以布尔类型主要用于逻辑判定
     真 True，假False。而在c++中：真 true，假 false
"""

c1 = True
c2 = False
print(type(c1))
print(type(c2))

# 5.其他类型
"""
   如： list、tuple、dict,自定义类型等等 
"""
# 总结
"""
类型带来的意义：
   1. 不同的类型，占用的内存空间是不同的
     占几个字节：
       int 默认是4个字节，动态扩容
       float 固定8个字节
       bool 一个字节就足够了
       str 变长的
   2. 不同的类型，对应能够进行的操作也是不同的
      int / float，可以+ - * /    不可以使用len求长度
      str 只能 + ，不能- * /      可以使用len 求长度 
      
"""
# 动态类型
"""
   程序运行过程中，变量的类型可能发生改变
   动态类型写法，变比较灵活--提高了语言的表达能力
   但是：灵活在编程中，往往是‘贬义词’，因为更容易出错
   相比之下，静态类型的语言还是更好一些--尤其是在大型的程序中，多人协作开发
   
   静态类型：
   程序运行中，变量的类型始终不变
   在c++和Java中
   int a = 10;
       a 这个变量在程序运行的整个过程中，始终都是int,如果尝试a = "hello"，
          那么编译阶段就会报错
          
    所以一个编程语言，是否是动态类型，只是取决于运行是=时，类型是否发生改变，
    不取决于变量定义的时候是否声明类型。      
"""

a: int = 10   # 声明是在变量后面加 ： 类型
print(type(a))

a = 3.123
print(type(a))

a = 'asdf'
print(type(a))
